What is file-loader?
The file-loader npm package is used to process files such as images, fonts, and other binary assets within a webpack build process. It can copy files to the output directory and resolve import/require() on a file into a url.
What are file-loader's main functionalities?
Importing Images
Allows importing image files directly in JavaScript or TypeScript files. The file-loader processes the import and replaces it with the final path to the output file.
import img from './file.png';
Configuring Output Path and Filenames
Configures webpack to output files with a specific naming pattern and to a specific directory. It also allows setting a public path for the files when they are referenced in the browser.
module.exports = {
module: {
rules: [
{
test: /\.(png|jpe?g|gif)$/i,
use: [
{
loader: 'file-loader',
options: {
name: '[path][name].[ext]',
outputPath: 'images/',
publicPath: 'assets/',
},
},
],
},
],
},
};
Handling Fonts
Enables the inclusion and processing of font files in various formats. The file-loader will handle these assets and output them to a specified directory.
module.exports = {
module: {
rules: [
{
test: /\.(woff|woff2|eot|ttf|otf)$/i,
use: [
{
loader: 'file-loader',
options: {
name: '[name].[ext]',
outputPath: 'fonts/',
},
},
],
},
],
},
};
Other packages similar to file-loader
url-loader
The url-loader works like the file-loader, but can return a Data URL if the file is smaller than a byte limit. This can reduce the number of HTTP requests for small files.
raw-loader
The raw-loader allows importing files as a string. This is useful for importing things like HTML or SVG directly into your JavaScript code, which is different from file-loader's typical binary asset handling.
copy-webpack-plugin
This plugin allows copying individual files or entire directories to the build directory. It is more flexible than file-loader for simply copying files without processing them through webpack's module system.
file loader for webpack
Usage
Documentation: Using loaders
var url = require("file!./file.png");
By default the filename of the resulting file is the MD5 hash of the file's contents
with the original extension of the required resource.
Filename templates
You can configure a custom filename template for your file using the query
parameter name
. For instance, to copy a file from your context
directory
into the output directory retaining the full directory structure, you might
use ?name=[path][name].[ext]
.
Filename template placeholders
[ext]
the extension of the resource[name]
the basename of the resource[path]
the path of the resource relative to the context
query parameter or option.[hash]
the hash or the content[<hashType>:hash:<digestType>:<length>]
optionally you can configure
- other
hashType
s, i. e. sha1
, md5
, sha256
, sha512
- other
digestType
s, i. e. hex
, base26
, base32
, base36
, base49
, base52
, base58
, base62
, base64
- and
length
the length in chars
[N]
the N-th match obtained from matching the current file name against the query param regExp
Examples
require("file?name=js/[hash].script.[ext]!./javascript.js");
require("file?name=html-[hash:6].html!./page.html");
require("file?name=[hash]!./flash.txt");
require("file?name=[sha512:hash:base64:7].[ext]!./image.png");
require("file?name=img-[sha512:hash:base64:7].[ext]!./image.jpg");
require("file?name=picture.png!./myself.png");
require("file?name=[path][name].[ext]?[hash]!./dir/file.png")
License
MIT (http://www.opensource.org/licenses/mit-license.php)